package cn.zebra.dev.product.module.product.service;

import cn.zebra.dev.ibatis.plus.service.IService;
import cn.zebra.dev.ibatis.plus.utils.PageUtils;
import cn.zebra.dev.product.module.product.entity.ProductEntity;

import java.util.List;
import java.util.Map;

/**
 * 商品表
 *
 * @author runnable
 * @date 2019-09-05 14:35:42
 */
public interface ProductService extends IService<ProductEntity> {

    /**
     * 获取商品信息 (简易)
     * -id
     * -商品编码
     * -商品名称
     * -商品图片
     * -总数量(库存)
     * -单位
     *
     * @param id 商品id
     * @return 商品信息
     */
    @Override
    ProductEntity findById(Long id);

    /**
     * 获取商品信息 (完整)
     *
     * @param id     商品id
     * @param params -key (查询筛选条件)
     *               showProductName        返回商品名称
     *               showShortName          返回商品短名称
     *               showPoint              返回商品购买积分
     *               showProductImage       返回商品图片
     *               showTotal              返回商品总库存
     *               showCost               返回商品运费
     *               showUnitName           返回单位名称
     *               showProductType        返回商品类型
     *               showUnitPrice          返回商品单价
     *               showLevelExp           返回经验值
     * @return 商品信息
     */
    ProductEntity findById(Long id, Map<String, Object> params);

    Boolean saveProduct(ProductEntity entity, Long createId);

    Boolean updateProduct(Long id, ProductEntity entity, Long updateId);

    /**
     * 查询商品信息分页(过滤 delete_flag = TRUE 的数据)
     *
     * @param params -key(查询参数)
     *               showShopId             查询店铺id
     *               showTotalNum           查询总数量
     *               showLevelExp           查询购买赠送经验值
     *               showFlag               查询是否上架
     *               showSaleTime           查询上架时间
     *               showShortName          查询商品短名称
     *               showPoint              查询商品购买积分
     *               showProductImage       查询商品图片
     *               showTotal              查询商品总库存
     *               showCost               查询商品运费
     *               showProductType        查询商品类型
     * @return 分页信息
     */
    PageUtils<ProductEntity> findPage(Map<String, Object> params);

    /**
     * 根据商品id集合查找商品列表
     *
     * @param productIds 商品id集合
     * @return 商品列表
     */
    List<ProductEntity> findByIds(List<Long> productIds);

    /**
     * 根据分类id集合查找商品集合
     *
     * @param categoryIds 分类id集合
     * @return 商品集合
     */
    List<ProductEntity> findByCategoryIds(List<Long> categoryIds);

    /**
     * 根据店铺id  分页查询商品
     *
     * @param params
     * @return
     */
    PageUtils<ProductEntity> findPageByShopId(Map<String, Object> params);

    /**
     * 根据商家id查找商品
     */
    ProductEntity findProductIdByShopId(Long id);



    /**
     * 根据商品名称查询商品
     *
     * @param
     * @return
     */
    PageUtils<ProductEntity> findPageByProductName(Map<String, Object> params);


    /**
     * 根据分类id 分类名称查询商品 key 价格/销量   sort  升序/降序
     * @param
     * @return
     */
    PageUtils<ProductEntity> findPageByCategoryIdAndProductName(Map<String, Object> params);


    /**
     * 根据品牌id查询商品
     * @param
     * @return
     */
    PageUtils<ProductEntity> findPageByBrandId(Map<String, Object> params);


    /**
     * 根据分组id查询商品
     * @param
     * @return
     */
    PageUtils<ProductEntity> findPageByGroupIdAndProductName(Map<String, Object> params);


    /**
     *  如果id和商品名称不能同时满足  就根据商品id查询
     * @param
     * @return
     */
    PageUtils<ProductEntity> findByCategoryId(Map<String, Object> params);

}

